package com.scrcu.core.batch.service;

import com.scrcu.core.batch.entity.BatchExecution;

/**
 * RPC服务接口
 * 用于手动调起，续跑、重跑批量的接口
 * 批量应用端调起、续跑、重做或取消批量的接口
 *
 * @author Mac_J
 */
public interface BatchBrokerService {

    /**
     * 将任务发往所有批量应用实例来执行
     *
     * @param exe
     * @return
     * @throws Exception
     */
    Object startAll(BatchExecution exe) throws Exception;

    /**
     * 将任务发往某一个批量应用实例来执行
     *
     * @param exe
     * @return String 实例ID
     * @throws Exception
     */
    String start(BatchExecution exe) throws Exception;

    /**
     * 续跑批量任务
     *
     * @param exe
     * @return
     * @throws Exception
     */
    String resume(BatchExecution exe) throws Exception;

    /**
     * 重跑批量任务
     *
     * @param exe
     * @return
     * @throws Exception
     */
    String redo(BatchExecution exe) throws Exception;

    /**
     * 取消批量任务
     *
     * @param exe
     * @param force
     * @throws Exception
     */
    void cancel(BatchExecution exe, boolean force) throws Exception;

    /**
     * 广播方法，查询所有批量应用节点运行的所有批量任务，及其进度状态
     *
     * @return
     */
    Object stat();
}
